package utils

import (
	"errors"
	"net/http"
	"strconv"
	response "yuanaiproblem/models"

	"github.com/gin-gonic/gin"
)

// parseParamToUint 解析路径参数为uint类型
// 入参：gin.Context、参数名
// 流程：获取路径参数 -> 验证非空 -> 转换为uint -> 返回结果或错误
func GarseParamToUint(c *gin.Context, paramName string) (uint, error) {
	paramStr := c.Param(paramName)
	if paramStr == "" {
		return 0, errors.New("缺少" + paramName)
	}
	paramInt, err := strconv.ParseUint(paramStr, 10, 64)
	if err != nil {
		return 0, errors.New("无效的" + paramName)
	}
	return uint(paramInt), nil
}

// handleServiceError 统一处理服务层返回的错误
// 入参：gin.Context、错误信息
// 流程：根据错误内容匹配状态码 -> 调用响应工具返回错误
func HandleServiceError(c *gin.Context, err error) {
	switch err.Error() {
	case "试卷不存在", "题目不存在", "试卷与题目关联不存在":
		response.Error(c, http.StatusNotFound, err.Error())
	case "题目已存在于试卷中":
		response.Error(c, http.StatusConflict, err.Error())
	case "无权限更新此试卷", "无权限删除此试卷", "无权查看该试卷":
		response.Error(c, http.StatusForbidden, err.Error())
	case "部分题目不属于该试卷", "总分必须大于0":
		response.Error(c, http.StatusBadRequest, err.Error())
	default:
		response.Error(c, http.StatusInternalServerError, err.Error())
	}
}
